$(function() {
	//加载完页面之后显示树
	showTree();
	getFirstPageByCondition();
	
	/**
	 * 显示树
	 */
	function showTree(){
//		alert("我是树");
		$.ajax({
			type : "post",
			target : "#treeDemo",
			dataType : "json",
			url : "searchDTreeAction.action",
			success : getTree,
			error:function(){
				alert("返回结果失败");
			}
		});
	}	
	
	/**
	 * 生成树
	 */
	function getTree(treeList2){
//		alert(treeList2);
		var treeList3 = eval("(" + treeList2 + ")"); 
		var setting = {
				data : {
					simpleData : {
						enable : true,						//使用简单 Array 格式的数据
						idKey: "dictionaryId",		//id
						pIdKey: "upDictionaryId",		//pid
						rootPId : "1",						//root
					},
					key : {
						name : "name",		//name
					}
				},
				callback : {
					onClick : onClick,
				}
		};
		var zNodes = treeList3;
		var log, className = "dark";
		//添加 树节点的 点击事件；
		function onClick(event, treeId, treeNode, clickFlag) {
			clickOnTree(event, treeId, treeNode, clickFlag);
		}
		//初始化树
		$.fn.zTree.init($("#treeDemo"), setting, zNodes);
//		var treeObj = $.fn.zTree.getZTreeObj("treeDemo");  
//		treeObj.expandAll(true);
	}
	
	/**
	 * 点击树节点的同时，将该字典信息对应的字典编号，字典名称，上级字典编号，上级字典名称保存下来
	 */
	function clickOnTree(event, treeId, treeNode, clickFlag){
		//设置节点为选中
		setChoose(treeNode);
		//点击一下树节点表格输出本节点以及下级节点的字典信息
		searchDictionary();
	}
	
	/**
	 *  点击一下树节点表格输出本节点以及下级节点的字典信息
	 */
	function searchDictionary() {
		getFirstPageByUpId();
	}
	
	function getFirstPageByUpId(){
		page = 1;
		getPageCountByUpDicId();
		showDictionaryByUpId(page);
	}
	
	/**
	 * 设置树节点为选中
	 */
	function setChoose(treeNode){
		//得到该节点的字典编号和字典名字
		document.getElementById("bt_dictionaryId").value = treeNode.dictionaryId;
		document.getElementById("bt_dictionaryName").value = treeNode.name;
		/*alert(treeNode.dictionaryId);
		alert(treeNode.name);*/
		if(treeNode.isParent) {
			$("#leaf").val(true);
		} else {
			$("#leaf").val(false);
		}
		if (treeNode.dictionaryId == "1") {
			//如果本节点是根节点，那么就不能执行更新和删除操作
//			$("#dictionary_change,#dictionary_delete").attr("disabled","disabled");
		} else {
			//如果本节点不是根节点，就可以执行更新和删除操作
			$("#dictionary_change,#dictionary_delete").removeAttr("disabled");
			//父节点
			var fatherNode=treeNode.getParentNode();
			//得到父节点的字典编号和字典名称
			document.getElementById("bt_upDictionaryId").value = fatherNode.dictionaryId;
			document.getElementById("bt_upDictionaryName").value = fatherNode.name;
			/*alert(fatherNode.dictionaryId);
			alert(fatherNode.name);*/
		}
	}
    
	/**
	 * 重新加载树 （这一部分待完善）
	 */
	function doReload() {
		var zTree = $.fn.zTree.getZTreeObj("treeDemo");
		zTree.reAsyncChildNodes(null, "refresh");
		//zTree.refresh();
	}

	/**
	 * 点击查询按钮，按条件查询字典信息
	 */
	$("#condition_sub").click(function(){
		getFirstPageByCondition();
	});
	
	function getFirstPageByCondition(){
		page = 1;
		getPageCountByCondition();
		showDictionaryByCondition(page);
	}
	
	function getPageCountByCondition(){
		$.ajax({
			url : "searchDicCountByCondition.action",
			type : "post",
			dataType : "json",
			data : {
				dictionaryId :   $("#dic_id").val(),
				name : $("#dic_name").val()
			},
			success : addPageingByCondition,
			error : function() {
				alert("返回结果失败！");
			}
		});
	}
	
	function addPageingByCondition(totalPage){
		$("#page").myPagination({
			pageCount:totalPage,
			pageNumber:totalPage,
			ajax: {
		        on: false,
		        onClick: function(page) {
		        	showDictionaryByCondition(page);
		        }
		    }
	    });
	}
	function showDictionaryByCondition(page){
		$.ajax({
			type : "post",
			dataType : "json",
			url : "searchDictionaryByCondition.action",
			data : {
				dictionaryId :   $("#dic_id").val(),
				name : $("#dic_name").val(),
				currentPage:page
			},
			success : showTable,
			error : function() {
				alert("返回结果失败");
			}
		});
	}
	
	function getPageCountByUpDicId(){
		$.ajax({
			type : "post",
			dataType : "json",
			url : "searchDicCountByCondition.action",
			data : {
				upDictionaryId : $("#bt_dictionaryId").val(),
			},
			success : addPageingByUpId
		});
	}
	
	function addPageingByUpId(totalPage){
		$("#page").myPagination({
			pageCount:totalPage,
			pageNumber:totalPage,
			ajax: {
		        on: false,
		        onClick: function(page) {
		        	showDictionaryByUpId(page);
		        }
		    }
	    });
	}
	
	function showDictionaryByUpId(page){
		$.ajax({
			type : "post",
			dataType : "json",
			url : "searchDictionaryByCondition.action",
			data : {
				upDictionaryId : $("#bt_dictionaryId").val(),
				currentPage:page
			},
			success : showTable
		});
	}
	
	/**
	 * 显示表格
	 */
	function showTable(result) {
		var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
		var dictionaryList = eval("(" + result + ")");
		$("#dictionaryTable  tr:not(:first)").remove();
		if(dictionaryList.length != 0) {
			// 在表格中添加数据
			var index = 0;
			for (var i = 0; i < dictionaryList.length; i++) {
				index++;
				if(dictionaryList[i].dictionaryOptionId=="1"){
					index = index -1;
					continue;
				}
				var isUse;
				if(dictionaryList[i].use==true){
					isUse="启用";
				}else{
					isUse="禁用";
				}
				var fatherNode = treeObj.getNodeByParam("dictionaryId",dictionaryList[i].upDictionaryId,null);
				$("#dictionaryTable").append(
						"<tr id='tr_"+ index +"'> <td><input type='checkbox' name='allcheckbox' class='beCheck' /></td><td>"
						+ index                                  + "</td><td >"
						+ dictionaryList[i].name + "</td><td >"
						+ dictionaryList[i].dictionaryId	 + "</td><td class='hide'>"
						+ dictionaryList[i].upDictionaryId + "</td><td class='hide'>"
						+ fatherNode.dictionaryName		 + "</td><td >"
						+ isUse                                  + "</td><td>"
						+ dictionaryList[i].description	         + "</td><tr>"
				);
			}
		}
	}
	
	/**
	 * 实现字典信息的删除 
	 */
	$("#dictionary_delete").click(function() {
		/*alert("我是删除");*/
		deleteDictionary();
	});

	/**
	 * 点击删除按钮后需要 删除表+删除数据库
	 */
	function deleteDictionary(){
		var isChoosed = $("input[name='allcheckbox']:checked").length > 0;  //批量删除之前判断是否已经选中字典
		if(!isChoosed){
			alert("选择字典记录后才能删除，请选择!");
		}else{
			//得到要删除的字典的编号
			var dictionaryIds = getDictionaryIdsChoosed();
			if(confirm("确定删除该字典集合吗？")) {
				deleteDictionaryOfDatabase(dictionaryIds);//删除数据库中对应的字典的信息
			}
		}
	}

	/**
	 * 得到要删除的字典的编号（复选框选中的）
	 */
	function getDictionaryIdsChoosed(){
		var deleteIds = "";
		// 遍历选中的checkbox
		$("input[name='allcheckbox']:checked").each(function() { 
			//得到删除的字典的编号
			deleteIds += $(this).parents("tr").find("td:eq(3)").text()+",";
			console.log("deleteIds: " + deleteIds);
		});
		deleteIds = deleteIds.substring(0, deleteIds.length-1);
		return deleteIds;
	}
	
	/**
	 * 删除数据库中的字典信息
	 */
	function deleteDictionaryOfDatabase(dictionaryIds){
		$.ajax({
			type : "post",
			dataType : "json",
			url : "deleteDictionaryAction.action",
			data : {
				dictionaryIds : dictionaryIds,
			},
			success : function(result) {
				if(result) {
					alert("删除成功");
					deleteDictionarysOfTable();
					showTree();
				} else {
					alert("服务内部错误,删除失败!");
				}
			},
			error:function(){
				alert("删除失败");
			}
		});
	}
	
	/**
	 * 批量删除表中选中的行
	 */
	function deleteDictionarysOfTable(){
		// 遍历选中的checkbox
		$("input[name='allcheckbox']:checked").each(function() { 
			// 获取checkbox所在行的顺序
			index = $(this).parents("tr").index()+1;
			//删除表中选中的信息
			$("table#dictionaryTable").find("tr:eq("+index+")").remove();
		});
		alterNoOfTable();
	}
	
	/**
	 * 判断是否选中树节点、表中数据
	 */
	function isChoosed(){
		var choose = $("#bt_dictionaryId").val();
		if(""==choose || choose==null|| "null"==choose){
			return false;
		}else{
			return true;
		}
	}
	
	/**
	 * 根据字典编号判断树对应字典与该字典对应的信息在表的哪一行
	 */
	function getRowInTable(dictionaryId){
		var index; 
		$("#dictionaryTable tr:gt(0)").each(function(i){
			if($(this).children("td").eq(3).text()==dictionaryId){
				index = i;
			}
		});
		return index = index + 1;
	}
	
	/**
	 *  实现点击保存按钮的监听事件 
	 */
	$('#dictionary_add').click(function() {
		var choose = isChoosed();
		if(!choose){
			alert("选择上级字典后才能添加，请选择");
			$("#dictionary_add").attr("data-target","");//隐藏模态框
		}else{
			//设置模态框是属于 增加 还是 更新
			isAdd = true;
			isChange = false;
			setModalOfAdd();
		}
	});
	
	/**
	 * 设置添加的弹出框 (上级字典编号，上级字典名称，要添加的字典编号)
	 */
	function setModalOfAdd(){
		
		$("#dictionary_add").attr("data-target","#dictionary_add_modal");  //弹出弹出框
		$(".addFormReset").trigger("click");						   //清空弹出框的内容
		//填充上级级字典的值 （即当前点击的树节点,对于添加而言）
		$("#dap_add_name").val($('#bt_dictionaryName').val());
		$("#dap_add_id").val($('#bt_dictionaryId').val());
		//请求下一个添加的字典的编号Id
		$.ajax({
			type : "post",
			datatype : "json",
			url : "searchDicNextId.action",
			data : {
				upDictionaryId: $('#bt_dictionaryId').val(),
			},
			success : function(nextId) {
				//得到下一个添加的字典的编号Id
				$('#dictionary_id').val(nextId);
			}
		});	
	}
	
	/**
	 *  实现点击修改按钮的时候，弹出框的处理
	 */
	$("#dictionary_change").click(function() {
		var choose = isChoosed();
		if(choose){
			//从数据库查找数据添加到修改界面中
			setModalOfChange();
		}else{
			alert("选择字典后才能修改，请选择");
			$("#dictionary_change").attr("data-target","");//隐藏模态框
		}
	});
	
	//从数据库查找数据添加到修改界面中
	function setModalOfChange(){
		isChange = true;
		isAdd = false;
		//弹出模态框
		$("#dictionary_change").attr("data-target","#dictionary_fix_modal");
		$(".updateFormReset").trigger("click"); // 清空修改弹出框
		//请求要修改的字典的原始信息
		$.ajax({
			type : "post",
			datatype : "json",
			url : "getUpdateDictionary.action",
			data : {
				"dictionary.dictionaryId" : $('#bt_dictionaryId').val(),
			},
			success : getInfoForChangeModal,
			error : function() {
				alert("请选择要修改的字典信息！");
			}
		});
	}

	/**
	 * 得到需要修改的字典的原始信息
	 */
	function getInfoForChangeModal(result){
		/*alert(result);*/
		//设置启用和禁用
		if(result.use){
			$(".dic_isUse:first").attr("checked", true);
		}else{
			$(".dic_isUse:last").attr("checked", true);
		}
		//填充上级字典的信息
		$("#upDicId").val($('#bt_upDictionaryId').val());
		$("#upDicName").val($('#bt_upDictionaryName').val());
		//填充要修改的字典的信息
		$('#dict_id').val(result.dictionaryId);
		$('#dict_name').val(result.name); 
		$('#dict_description').val(result.description); 
	}

	//添加操作的保存
	$("#dictionary_add_save").click(function() {
		/*alert("我是添加的保存");*/
		if (isAdd) {
			saveAddOfDatabase();//将新增的字典信息保存到数据库中
			$("#bt_dictionaryId").val("");
			$("#bt_dictionaryName").val("");
			$("#bt_upDictionaryId").val("");
			$("#bt_upDictionaryName").val("");
			$("#table_row").val("");
		}
	});
	
	/**
	 * 如果是添加的保存的话，在表的末尾追加新增的字典信息
	 */
	function saveAddOfTable(){
		//找到要添加的字典信息在表中的序号
		var index=parseFloat($("#dictionaryTable tr:last").find("td:eq(1)").text())+1;
		if(!$("#leaf").val()) {
			//追加到表的末尾
			var _tr = "<tr id='tr_"+ index +"'><td><input type='checkbox' name='allcheckbox' class='beCheck' /></td>";
				_tr	+= "<td>" + index + "</td>";
				_tr	+= "<td>" + $("#dictionary_name").val() + "</td>";
				_tr	+= "<td>" + $("#dictionary_id").val() + "</td>";
				_tr	+= "<td class='hide'>" + $("#dap_add_id").val() + "</td>"; 
				_tr	+= "<td class='hide'>" + $("#dap_add_name").val() + "</td>";
				_tr	+= "<td>" + $("input[type='radio'][class='dictionary_isUse']:checked").val()+ "</td>";
				_tr	+= "<td>" + $("#dictionary_description").val() + "</td>";
				$(_tr).appendTo($("#tabody"));
				showTable();
		}
	} 
	
	/**
	 * 将新增的字典信息保存到数据库中
	 */
	function saveAddOfDatabase(){
		$.ajax({
			type : "post",
			dataType : "json",
			url : "addDictionaryAction.action",
			data : {
				"dictionary.dictionaryId":   $('#dictionary_id').val(),
				"dictionary.upDictionaryId": $("#dap_add_id").val(),
				"dictionary.name":           $('#dictionary_name').val(),
				"dictionary.isUse":          $("input[type='radio'][class='dictionary_isUse']:checked").val()=="启用",
				"dictionary.description":    $('#dictionary_description').val(),
			},
			success : function(addResult) {
				alert("保存成功");
				$(".addFormReset").trigger("click");
				$("#dictionary_add_modal").modal("hide");
				saveAddOfTable();//在表的末尾追加新增的字典信息
				showTree();
				showTable();
			},
			error : function(addResult) {
				alert("保存失败 ");
				$(".addFormReset").trigger("click");
				$("#dictionary_add_modal").modal("hide");
			}
		});
	} 
	
	//修改操作的保存
	$("#dictionary_update_save").click(function() {
		if(isChange) {
			saveChangeOfDatabase();
		}
	});

	/**
	 * 将表中对应的那条修改的信息内容进行更新
	 */
	function saveChangeOfTable(dictionaryId,upDictionaryId,name,isUse,description){
		//找到修改的是第几行
		var index  = alterRow;
		$("#"+index).find("td").eq(2).text(name); 
		$("#"+index).find("td").eq(3).text(dictionaryId); 
		$("#"+index).find("td").eq(4).text(upDictionaryId); 
		$("#"+index).find("td").eq(6).text(isUse); 
		$("#"+index).find("td").eq(7).text(description);
		if(isUse=="禁用"){
			var len = $("#dictionaryTable tr").length;
			for (var i = 1; i < len; i++) {
				row = "tr_" + i;
				var condition = "启用"==($("#"+row).find("td").eq(6).text()) && ($("#"+row).find("td").eq(4).text()==dictionaryOptionId||$("#"+row).find("td").eq(3).text()==dictionaryOptionId);
				
				if(condition){
					
					$("#"+row).find("td").eq(6).text(isUse);
				}
			}
		}
	}
	
	/**
	 * 将更新的信息保存到数据库中
	 */
	function saveChangeOfDatabase(){
		var dictionaryId   = $('#dict_id').val();
		var upDictionaryId = $("#upDicId").val();
		var name = $('#dict_name').val();
		var isUse 				 = $(":radio[name='dic_isUse'][class='dic_isUse']:checked").val();
		var description 		 = $('#dic_description').val();
		$.ajax({
			type : "post",
			dataType : "json",
			url : "updateDictionaryAction.action",
			data : {
				"dictionary.dictionaryId":	    dictionaryId,
				"dictionary.upDictionaryId":	upDictionaryId,
				"dictionary.name": 				name,
				"dictionary.isUse":  			(isUse=="启用"),
				"dictionary.description":  		description,
			},
			success : function(updateResult) {
				alert("修改成功");
				$(".updateFormReset").trigger("click");
				$("#dictionary_fix_modal").modal("hide");
				saveChangeOfTable(dictionaryId,upDictionaryId,name,isUse,description);
				showTree();
			}
		});
	}	
	
	$("#autoRefreshTree").click(function() {
		showTree();
	});
	
	//全选
    $("#all").click(function(){
			if(this.checked){				 //如果当前点击的多选框被选中
				 $('input[type=checkbox][name=allcheckbox]').prop("checked", true );
			}else{								
			     $('input[type=checkbox][name=allcheckbox]').prop("checked", false );
			}
	 });
     //全选状态判断  
    $("#tabody").on("click",".beCheck",function(){
    	console.log("click me~!");
    	//定义一个临时变量，避免重复使用同一个选择器选择页面中的元素，提升程序效率。
		var $tmp=$('[name=allcheckbox]:checkbox');
		//用filter方法筛选出选中的复选框。并直接给CheckedAll赋值。
		$('#all').attr('checked',$tmp.length==$tmp.filter(':checked').length);
    })
});